package com.h.chatroom.common.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtParserBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import javax.crypto.SecretKey;
import java.util.Map;

@Slf4j
public class JwtUtils {
    // 密钥
    private static String SECRET_StRING = "UVWmYOFqebAcY8GXcLBD08c6rxmB82a8QaAENS7cNg4=";
    // 生成密钥
    private static final SecretKey KEY = Keys.hmacShaKeyFor(Decoders.BASE64.decode(SECRET_StRING));

    // 生成令牌
    public static String getToken(Map<String,Object> claims) {
        String compact = Jwts.builder()
                .setClaims(claims) // 设置负载，也就是自定义内容
                .signWith(KEY) // 设置签名
                .compact(); // 生成 token 令牌
        return compact;
    }

    // 验证令牌
    public static Claims parseToken(String token) {
        if(!StringUtils.hasLength(token)) {
            return null;
        }
        // 创建解析器，设置签名秘钥
        JwtParserBuilder jwtParserBuilder = Jwts.parserBuilder().setSigningKey(KEY);
        //
        Claims claims = null;
        try {
            // 根据解析器中设置的签名秘钥对token 进行解析其负载部分，一旦出错就会报错
            claims = jwtParserBuilder.build().parseClaimsJws(token).getBody();
        }catch (Exception e) {
            log.error("token 校验失败: " + token);
        }
        return claims;
    }
}
